<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>使用Symbol定义protected属性</title>
</head>
<body>
    <script>
        // // 使用Symbol定义一个属性
        // const URL = Symbol();
        // // class Request{
        // //     constructor(name){
        // //         this[URL] = "https://hjksdfhsdk.com";
        // //         this.name = name;
        // //     }

        // //     set url(url){
        // //         if(!/^https?:\/\//i.test(url)){
        // //             throw new Error("地址格式错误！");
        // //         }

        // //         this[URL] = url;
        // //     }

        // //     get url(){
        // //         return this[URL];
        // //     }
        // // }


        // // 这个属性在当前类及其子类是可以访问的，外部是不可以访问的
        // class Common{
        //     [URL] = "https://hjksdfhsdk.com";
        // }

        // class Request extends Common{
        //     constructor(name){
        //         // 在子类的构造函数中调用一下父类的构造函数，哪怕父类没有，也要调用一下
        //         super();
        //         this.name = name;
        //     }

        //     set url(url){
        //         if(!/^https?:\/\//i.test(url)){
        //             throw new Error("地址格式错误！");
        //         }

        //         this[URL] = url;
        //     }

        //     get url(){
        //         return this[URL];
        //     }
        // }



        // 可以将多个属性放到Symbol中
        const protects = Symbol();
        class Common{
            constructor(){
                this[protects] = {};
                this[protects].url = "https://hjksdfhsdk.com";
            }
        }

        class Request extends Common{
            constructor(name){
                // 在子类的构造函数中调用一下父类的构造函数，哪怕父类没有，也要调用一下
                super();
                this[protects].name = name;
            }

            set url(url){
                if(!/^https?:\/\//i.test(url)){
                    throw new Error("地址格式错误！");
                }

                this[protects].url  = url;
            }

            get url(){
                return this[protects].url;
            }
        }

        let request = new Request("https://kriejuior.com");
        console.log(request.url);
    </script>
</body>
</html>